package radio;

/**
 * Radio.java
 * Esta clase contiene las implementaciones de la interfaz iRadio
 * @author Paulo Chang-11076,Andrea Mendoza-11331,Vinicio Gomez-11120,Felipe Zelada-08164 
 * @version 1.0
 */
public class Radio implements iRadio {
	/**indica el estado del radio*/
    private boolean power = false;
    /**true si se encuentra en AM*/
    private boolean AMEnable = false;
    /**distancia actual del inicio de FM*/
    private int FMOffset = 0;
    /**distancia actual del inicio de AM*/
    private int AMOffset = 0;
    /**Frecuencia actual*/
    private float ActualFrequency = 87.9f;
    /**Memoria de frecuencias FM*/
    private float FMMemory[] = {87.9f, 87.9f, 87.9f, 87.9f, 87.9f, 87.9f, 87.9f, 87.9f, 87.9f, 87.9f, 87.9f, 87.9f};
    /**Memoria de frecuencias AM*/
    private float AMMemory[] = {530f, 530f, 530f, 530f, 530f, 530f, 530f, 530f, 530f, 530f, 530f, 530f, 530f};
    
    @Override
    public boolean Power() {
        power = !power;
        return power;
    }

    @Override
    public boolean ChangeSignal() {
       if (power) { 
            AMEnable = !AMEnable;
            ActualFrequency = AMEnable?530+((AMOffset)%1080):87.9f+(((float)((FMOffset)%200))/10);
       }
        return AMEnable;
        
    }
 
    @Override
    public float NextFreq() {
        if (power) {
           ActualFrequency = AMEnable?530+((AMOffset+10)%1080):87.9f+(((float)((FMOffset+2)%200))/10);
           ActualFrequency*=10;
           ActualFrequency = Math.round(ActualFrequency);
           ActualFrequency/=10;
           AMOffset=AMEnable?(AMOffset+10)%1080:AMOffset;
           FMOffset=AMEnable?FMOffset:((FMOffset+2)%200);
        }
        return ActualFrequency;
    }

    @Override
    public boolean SaveFreq(int Boton) {
        if (power) {
            if (AMEnable) 
                AMMemory[Boton-1]=ActualFrequency; 
            else 
                FMMemory[Boton-1]=ActualFrequency;
            return true;
        } else return false;
    }

    @Override
    public float ChangeTune(int Boton) {
        if (power) {
            if (AMEnable) 
                ActualFrequency = AMMemory[Boton-1]; 
            else 
                ActualFrequency = FMMemory[Boton-1];
        }
        return ActualFrequency;
    }

    @Override
    public boolean IsOn() {
        return power;
    }

    @Override
    public boolean IsAm() {
        return AMEnable;
    }

    @Override
    public float GetFreq() {
        return ActualFrequency;
    }
}
